package sanrenxing.login.dao.impl;

import sanrenxing.login.dao.LoginDao;
import sanrenxing.utils.JdbcUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

/**
 * @author Administrator
 * @date 2020/10/13 22:06
 * 编辑者：邓志强
 * 功能：
 */
public class LoginDaoImpl implements LoginDao {

    /**
     * 验证学员输入账号密码是否符合
     * @param userName 账号
     * @param password 密码
     * @return
     */
    public String verify(String userName,String password){
        //定义连接对象
        Connection conn=null;
        //定义预编译对象
        PreparedStatement pstmt=null;
        //定义结果集对象
        ResultSet rs=null;
        try {
            //实例化连接对象
            conn= JdbcUtils.getConnection();
            //创建查询身份证和学员编号sql语句，输入学员密码为条件
            String sql="select selfId,stuId from Student where stuPwd=?";
            //实例化预编译对象
            pstmt=conn.prepareStatement(sql);
            //给占位符赋值传入的密码
            pstmt.setString(1,password);
            //执行查询语句
            rs=pstmt.executeQuery();
            //循环判断结果集中是否有值
            while(rs.next()){
                //定义一个字符串接收身份证号
                String str=rs.getString("selfId");
                //通过字符串下标取出后六位
                str=str.substring(str.length()-6,str.length());
                //判断后六位是否与用户输入的账号一致
                if (str.equals(userName)){
                    //返回结果集中取到的学员编号
                    return rs.getString("stuId");
                }
            }
        } catch (SQLException e) {
            //手动抛出异常
            new RuntimeException(e.getMessage(),e);
        }finally{
            //关闭流
            JdbcUtils.close(rs,pstmt,conn);
        }
        //返回null
        return null;
    }

    /**
     * 教师登录页面
     * @param userName
     * @param password
     * @return
     */
    @Override
    public Map<String,Object> teacherVerify(String userName, String password) {
        //定义一个map集合
        Map<String,Object> map=new HashMap<>();
        //定义一个连接对象
        Connection conn=null;
        //定义一个预编译对象
        PreparedStatement pstmt=null;
        //定义一个结果集对象
        ResultSet rs=null;
        //定义一个权限功能编号字符串变量，赋空值
        String funId="";
        //定义一个角色编号int类型的变量，赋0
        int roleId=0;
        try {
            //实例化连接对象
            conn= JdbcUtils.getConnection();
            //创建sql查询语句，教师表与角色权限表连接，查询内容是角色编号、功能编号，连接条件为角色编号相同，外加条件为教师账号和教师密码
            String sql="SELECT u.roleId roleId,r.funId funId FROM teacher u JOIN role_right r ON u.roleId=r.roleId WHERE teacherNum=? AND teacherPwd=?";
            //实例化预编译对象
            pstmt=conn.prepareStatement(sql);
            //给占位符赋值账号
            pstmt.setString(1,userName);
            //给占位符赋值密码
            pstmt.setString(2,password);
            //执行查询语句
            rs=pstmt.executeQuery();
            //循环取出结果集中的值
            while (rs.next()){
                //取出结果集中的角色编号赋值给定义的角色变量
                roleId=rs.getInt("roleId");
                //循环取出结果集中的功能编号递加进去，已逗号分隔
                funId+=rs.getString("funId")+",";
            }
            if (funId.length()!=0){
                //去掉功能字符串最后的逗号
                funId=funId.substring(0,funId.length()-1);
            }
            //将角色编号添加到map集合中
            map.put("roleId",roleId);
            //将功能编号添加到map集合中
            map.put("funId",funId);
        } catch (SQLException e) {
            //抛出异常
            new RuntimeException(e.getMessage(),e);
        }finally{
            //关闭流
            JdbcUtils.close(rs,pstmt,conn);
        }
        //返回map
        return map;
    }

    /**
     * 通过教师账号查询教师编号
     * @param userName
     * @return
     */
    @Override
    public int findTeacherId(String userName) {
        //定义连接对象
        Connection conn=null;
        //定义预编译对象
        PreparedStatement pstmt=null;
        //定义老师编号变量，赋值0
        int teacherId=0;
        //定义结果集对象
        ResultSet rs=null;
        try {
            //实例化连接对象
            conn= JdbcUtils.getConnection();
            //创建sql查询语句，通过教师表查询教师编号，条件为教师账号
            String sql="select teacherId from teacher where teacherNum=?";
            //实例化预编译对象
            pstmt=conn.prepareStatement(sql);
            //给占位符赋值账号
            pstmt.setString(1,userName);
            //执行查询语句
            rs=pstmt.executeQuery();
            //重结果集中取出值
            if (rs.next()){
                //将教师编号从结果集中取出并赋值给变量
                teacherId=rs.getInt("teacherId");
                //返回教师编号变量
                return teacherId;
            }
        } catch (SQLException e) {
            //抛出异常
            new RuntimeException(e.getMessage(),e);
        }finally{
            //关闭流
            JdbcUtils.close(rs,pstmt,conn);
        }
        //返回0
        return 0;
    }

}
